import plugin from '../../../lib/plugins/plugin.js';
import fs from 'fs/promises'; // 使用 promise 版 fs，更符合 async/await 风格
import { parse } from 'yaml';
import { getCurrentTime } from "../model/getCurrentTime.js";
import puppeteer from "../../../lib/puppeteer/puppeteer.js";

// 定义用户初始数据模板（使用 const 避免意外修改）
const USER_DATA_TEMPLATE = {
    user: {
        name: null,
        id: 0, // QQ号
        Integral: 0, // 积分
        Days: 0, // 创建第几天
        Consumption: 0, // 累计使用的积分
        time: null, // 注册时间（毫秒级时间戳）
        avatar: null,
        uuid: null // 唯一标识
    },
    signin: {
        Checkinornot: false,  // 是否签到
        Continuous: 0, // 连续签到天数
        Success: 0,  // 正常签到次数
        Failed: 0,  // 签到失败次数
        past: null,  // 上次签到时间
        now: null, // 最新签到时间
        Experience: 0 // 签到获得的经验
    },
    AI: {
        times: 0,  // 累计AI使用次数
        model: "GPT-4.1", // 默认模型
        Personnel: null,  // AI人设
        Number: 0,  //ai使用次数
        AI_Cumulativeintegral: 0  //AI累积使用积分
    },
    games: {},
    Status: 0,  // 0正常，1停用，2封号
    Total: 0,  // 累计获得的积分
    Cumulativeintegral: 0  //累积使用积分
};

export class AIhub_sign extends plugin {
    constructor() {
        super({
            name: '用户',
            dsc: '用户注册与个人信息相关功能',
            event: 'message',
            priority: 2000,
            rule: [
                {
                    reg: '^#注册(.*)',
                    fnc: 'Register'
                },
                {
                    reg: '^#个人信息$',
                    fnc: 'PersonalInformation'
                }
            ]
        });
    }
    
    async Register(e) {
        try {
            // 路径处理优化：使用更简洁的写法
            const yamlPath = new URL('../config/Rediskey.yaml', import.meta.url).pathname;
            const modelDataPath = new URL('../config/model.json', import.meta.url).pathname;
            
            // 读取配置文件（合并读取操作，减少代码冗余）
            const [yamlContent, jsonContent] = await Promise.all([
                fs.readFile(yamlPath, 'utf8'),
                fs.readFile(modelDataPath, 'utf8')
            ]);
            const config = parse(yamlContent);
            const modelConfig = JSON.parse(jsonContent); // 若未使用可注释
            
            // 检查用户是否已注册（变量名语义化）
            const redisKey = `${config.PersonalData}${e.user_id}`;
            const existingUserData = await redis.get(redisKey);
            
            if (existingUserData) {
                return e.reply("您已注册，无需重复注册~");
            }
            
            // 初始化用户数据（深拷贝模板）
            const userData = JSON.parse(JSON.stringify(USER_DATA_TEMPLATE));
            
            // 处理用户名（正则匹配优化，避免未定义变量）
            const regResult = e.msg.match(/^#注册(.*)/);
            userData.user.name = regResult?.[1]?.trim() || e.name; // 优先取注册时输入的名称，无则用默认名
            
            // 完善用户基础信息
            userData.user.id = e.user_id;
            userData.user.time = Date.now(); // 注册时间戳
            userData.user.uuid = Math.floor(Math.random() * 1000000)
                .toString()
                .padStart(7, '0'); // 生成7位UUID
            userData.user.avatar = `http://q.qlogo.cn/headimg_dl?dst_uin=${e.user_id}&spec=640&img_type=jpg`;
            
            // 初始化积分
            userData.user.Integral = 20; // 直接赋值更清晰
            userData.Total = 20;
            
            // 保存用户数据到Redis
            await redis.set(redisKey, JSON.stringify(userData)); // 原代码此处误写为 get，已修正为 set
            
            // 准备生成图片的数据（处理时间格式化和状态转换）
            const statusText = userData.Status === 0 ? "正常" :
                              userData.Status === 1 ? "停用" : "封号";
            // 获取模型数据
            
            
            const puppeteerData = {
                tplFile: "./plugins/AIHub-plugin/resources/html/68eb9f2cf5.html",
                dz: process.cwd(),
                name: userData.user.name,
                avatar: userData.user.avatar,
                UID: userData.user.uuid,
                QQID: userData.user.id,
                time: await getCurrentTime(userData.user.time), // 注册时间
                Status: statusText,
                Signin: userData.signin.Checkinornot ? "已签到" : "未签到",
                Checkintime: userData.signin.past ? await getCurrentTime(userData.signin.past) : "未签到",
                Checkintimenow: userData.signin.now ? await getCurrentTime(userData.signin.now) : "未签到",
                Experience: userData.signin.Experience,
                Continuous: userData.signin.Continuous,
                RegistrationDays: userData.user.Days,
                Cumulative: userData.Total,
                Model: userData.AI.model,
                Input: "$2/M tokens",
                Output: "$8/M tokens",
                context: "$8/M tokens",
                company: "OpenAI",
                Cumulativetimes: 0,
                Cumulativetimes: 0,
                gxtime: await getCurrentTime(Date.now())
            };
            
            let img = await puppeteer.screenshot("AIHub", {
                ...puppeteerData
            })
            return e.reply(img)
        } catch (error) {
            logger.error(`用户注册失败: ${error.message}`, error.stack);
            return e.reply("注册过程出错，请稍后再试~");
        }
    }

    async PersonalInformation(e) {
        // 可在此处实现个人信息查询逻辑
        e.reply("个人信息功能待实现~");
    }
}


async function Getmodel(name, modelConfig) {

}